package com.jt.controller;

import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import com.jt.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@CrossOrigin   //解决跨域问题
public class UserController {

    @Autowired
    private UserService userService;

    @ResponseBody
    @RequestMapping("/findAll")
    public List<User> findAll(){

        return userService.findAll();
    }
    /*
     * 业务：根据id查询数据库
     * 请求类型：get请求
     * 请求路径：http://localhost:8090/getUserById?id=1
     * 请求参数：id=1
     * 返回值结果：User对象
     * MVC:接收参数名称必须与传递参数的名称一致
     * */
    @ResponseBody
    @GetMapping("/getUserById")//表示只允许get请求类型访问
    public User getUserById(Integer id){

        return userService.getUserById(id);
    }
    /*
     * 业务：根据name/sex查询数据
     * 请求类型：get请求
     * 请求路径：http://localhost:8090/getUserByUS
     * 请求参数：user对象方式
     * 返回值结果：List<User>
     * */
    @GetMapping("/getUserByUS")
    public List<User> getUserByUS(User user){

        return userService.getUserByUS(user);
    }
    /*
     * 业务：模糊查询name="%xxx%"
     * 请求类型：get请求
     * 请求路径：http://localhost:8090/user/君
     * 请求参数：name属性
     * 返回值结果：List<User>
     * RestFul参数接收：
     *         1.多个参数使用 / 分割
     *         2.参数使用{}形式包裹
     *         3.接参使用特定的注解  @PathVariable
     *
     * */
    @GetMapping("/user/{name}")
    public List<User> getUserByName(@PathVariable String name){
        return userService.getUserByName(name);
    }

    //restGul风格2，查询name=“精”，sex="女"
    //如果参数有多个，则可以使用对象封装。要求参数名称与属性名一致
    /*@GetMapping("/user/{name}/{sex}")
    public List<User> getUserBySex(User user){
        return userService.getUserBySex();
    }*/

    @DeleteMapping("/deleteName")
    public String deleteName(User user){
        userService.deleteName(user);
        return "删除数据成功！！";
    }

    //url:http://localhost:8090/US/宵夜吃什么/女
    @DeleteMapping("/US/{name}/{sex}")
    public String deleteUS(User user){
        userService.deleteUS(user);
        return "已删除";
    }

    /*根据ID删除数据
     * url:http://localhost:8090/user/"+id*/
    @DeleteMapping("/user/{id}")
    public String deleteUserById(@PathVariable Integer id){
        userService.deleteUserById(id);
        return "删除id"+id+"成功";
    }

    /*
    * 需求：完成用户入库操作
    * url:http://localhost:8090/saverUser
    * 参数：对象的Json串.{key:value}
    * 类型：POST
    * 返回值：string
    * 难点：如何将JSON串转化为User对象
    * SpringMVC:针对于JSON转化为对象，开发2个注解
    * 1. @ResponseBody:将对象转化为JSON串
    * 2. @RequestBody:将JSON串转化为User对象
    * */

    @PostMapping("/saveUser")
    public String saveUser(@RequestBody User user){
        System.out.println(user);
        userService.saveUser(user);
        return "新增数据成功";
    }

    /*http://localhost:8090/User/好生活/100/其他*/
    @PostMapping("/User/{name}/{age}/{sex}")
    public String saveUser2(User user){
        userService.saveUser2(user);
        return "新增数据成功2";
    }

    @PutMapping("/updateUser")
    public String updateUser(@RequestBody User user){
        userService.updateUser(user);
        return "修改成功";


    }









}
